import config from "../config";

export default {
  // 设置
  setItem(key, value) {
    // 定义需要存储的key和value
    // 存储的key,是当前的命名空间
    const storageKey = config.nameSpace;
    // 存储的value,就是接收的两个形参,注意属性名如果是变量,需要中括号
    let storageVlaue = { [key]: value };
    // 先取出原来的storage对应的value对象,如果没有,返回空对象
    let oldStorageValue = window.localStorage.getItem(storageKey) || "{}";
    // 取出来的是json字符串,需要序列化为对象
    oldStorageValue = JSON.parse(oldStorageValue);
    // 原来的数据和现在的数据放到一起,涉及对象合并,同名会覆盖
    storageVlaue = { ...oldStorageValue, ...storageVlaue };
    // 需要存入localStorage,首先转为json字符串
    storageVlaue = JSON.stringify(storageVlaue);
    // 存入localStorage
    window.localStorage.setItem(storageKey, storageVlaue);
  },
  //  获取
  getItem(key) {
    //   通过命名空间,找到存储的value对象(JSON 字符串)
    let storageVlaue = window.localStorage.getItem(config.nameSpace) || "{}";
    // JSON字符串转对象
    storageVlaue = JSON.parse(storageVlaue);
    // 通过key,从对象中取值并返回
    return storageVlaue[key];
  },
  //  清除某一项
  clearItem(key) {
    //   清除的是某一项,而不是全部清除,localStorage自带的api是全部清除
    // 通过命名空间,找到存储的value对象
    let storageValue = window.localStorage.getItem(config.nameSpace) || "{}";
    //json字符串转对象
    storageValue = JSON.parse(storageValue);
    // 通过delete删除
    delete storageValue[key];
    // 对象再转回json字符串
    storageValue = JSON.stringify(storageValue);
    // 写入(存储)localStorage
    window.localStorage.setItem(config.nameSpace, storageValue);
  },

  //  清除所有
  clearAll() {
    // 与原生一致
    window.localStorage.clear();
  },
};
